package javase_class_250908;

/**
 * ClassName: Outer
 * Package: javase_class_250908
 * Description:
 *
 * @Author harkjeans
 * @Create 2025/9/8 18:42
 * @Version 1.0
 */
public class Outer {
    private String outerField = "Outer Field";

    // 成员内部类
    class Inner {
        private String innerField = "Inner Field";

        public void display() {
            // 内部类可以直接访问外部类的私有成员
            System.out.println("Accessing: " + outerField);
            // 也可以访问自己的成员
            System.out.println("My own: " + innerField);

            // 如何获取外部类对象的引用？
            System.out.println("My Outer object is: " + Outer.this);
        }
    }

    public void createInner() {
        // 在外部类内部创建内部类对象
        Inner inner = new Inner();
        inner.display();
    }
}

// 外部使用：必须先有外部类对象，才能创建内部类对象
class Test {
    public static void main(String[] args) {
        Outer outer = new Outer();
        System.out.println(outer);

        // 语法：OuterClass.InnerClass innerObj = outerObj.new InnerClass();
        Outer.Inner inner = outer.new Inner();
        inner.display();

        // 或者通过外部类的方法间接创建
        outer.createInner();
    }
}